In the field of network or cloud computing, services have been developed to provide cloud storage for use by client computers connecting to the cloud. While cloud storage has been implemented in many ways, recently, cloud storage has become closely integrated with the file systems (and operating systems) of client computers. From a user's perspective, it has been desirable to provide a cloud file that appears to have universal or floating presence in the cloud as well as on a user's client computing devices that connect to the cloud. A goal has been to allow a file that is stored in the cloud to be read and written by a user's devices connecting to the cloud as well as perhaps software within the cloud. A single file entity (from the user's perspective) might in fact have multiple copies or versions on the cloud and the client computers that are being updated in parallel. To maintain coherency for the file, i.e., to keep the file content consistent across the cloud and across the user devices that connect to the cloud, a file synchronization system, or sync engine, may be employed.
To provide a smooth user experience and transparent coherency, this synchronization of a cloud-based file is preferably performed at the file system and/or operating system level. This hides the housekeeping work that is usually required to maintain synchronization between instances of what are supposed to be the same logical file. This system-managed synchronization also relieves programmers of the burden of having to code their own custom synchronization software.
Nonetheless, there may be times when an application or other software outside the sync engine and client operating system needs to perform custom synchronization or otherwise manage and coordinate the cloud and client based instances of a file. For example, collaborative concurrent editing for a word processor might involve synchronization issues that a system-provided sync engine cannot address. In addition, operating system level or file system level sync engines have not been able to share sync-related responsibilities with arbitrary applications. If an application has needed to use a cloud-shared file in a way that might conflict with or interfere with the sync engine, the only choice would be for the application to assume total responsibility for the file from the sync engine.
Discussed below are techniques for, among other things, allowing a sync engine to temporarily relinquish synchronization of a file and to make use of sync-related functionality provided by applications.